summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Naming/FaultTolerant/FT_PG_Group_Factory.cpp
blob: 227f5130fcc465fe9d682f72e2a52c0d83351f38 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// -*- C++ -*-

//=============================================================================
/**
 * @file  FT_PG_Group_Factory.cpp
 *
 *
 * @author Byron Harris <harrisb@ociweb.com>
 */
//=============================================================================

#include "orbsvcs/Log_Macros.h"
#include "orbsvcs/Naming/FaultTolerant/FT_PG_Group_Factory.h"
#include "orbsvcs/Naming/FaultTolerant/FT_PG_Object_Group_Storable.h"
#include "orbsvcs/Naming/FaultTolerant/FT_Naming_Replication_Manager.h"

#include "orbsvcs/PortableGroup/PG_Group_List_Store.h"

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

void
TAO::FT_PG_Group_Factory::set_replicator (TAO_FT_Naming_Replication_Manager *repl)
{
  this->replicator_ = repl;
}

void
TAO::FT_PG_Group_Factory::set_object_group_stale (
  const FT_Naming::ObjectGroupUpdate & group_info)
{
  if (this->use_persistence_)
    {
      PortableGroup::ObjectGroupId group_id = group_info.id;

      // If a group was added or destroyed then the group list could be stale.
      if (group_info.change_type == FT_Naming::NEW ||
          group_info.change_type == FT_Naming::DELETED)
        {
          if (TAO_debug_level > 3)
            {
              ACE_CString change_type_str ("created");
              if (group_info.change_type == FT_Naming::DELETED)
                {
                  change_type_str = "deleted";
                }
              ORBSVCS_DEBUG ((LM_DEBUG,
                            ACE_TEXT ("TAO (%P|%t) - FT_PG_Group_Factory: ")
                            ACE_TEXT ("Setting list store as stale "),
                            ACE_TEXT ("because of group with ID %lld "),
                            ACE_TEXT ("was %C\n"),
                            group_id, change_type_str.c_str ()));
            }
          this->list_store_->stale(true);
        }

      PG_Object_Group * group = 0;
      if (!find_group (group_id, group))
        {
          throw PortableGroup::ObjectNotFound ();
        }
      FT_PG_Object_Group_Storable * og =
        dynamic_cast<FT_PG_Object_Group_Storable *> (group);

      if (!og)
        {
          ORBSVCS_ERROR ((LM_ERROR,
                      ACE_TEXT ("TAO (%P|%t) - FT_PG_Group_Factory ")
                      ACE_TEXT ("In setting object group stale could not cast ")
                          ACE_TEXT ("to FT_PG_Object_Group_Storable\n")));
          throw CORBA::INTERNAL ();
        }

      if (TAO_debug_level > 3)
        {
          ORBSVCS_DEBUG ((LM_DEBUG,
                      ACE_TEXT ("TAO (%P|%t) - ")
                      ACE_TEXT ("Setting object group with ID %lld as stale\n"),
                      group_id
                      ));
        }
      og->stale (true);
    }
  else
    {
      throw CORBA::INTERNAL ();
    }
}

TAO::PG_Object_Group_Storable *
TAO::FT_PG_Group_Factory::create_persistent_group (
      CORBA::ORB_ptr orb,
      PortableGroup::FactoryRegistry_ptr factory_registry,
      TAO::PG_Object_Group_Manipulator & manipulator,
      CORBA::Object_ptr empty_group,
      const PortableGroup::TagGroupTaggedComponent & tagged_component,
      const char * type_id,
      const PortableGroup::Criteria & the_criteria,
      const TAO::PG_Property_Set_var & type_properties,
      TAO::Storable_Factory & storable_factory)
{
  TAO::PG_Object_Group_Storable * objectGroup = 0;
  ACE_NEW_THROW_EX (
  objectGroup,
  TAO::FT_PG_Object_Group_Storable (
    orb,
    factory_registry,
    manipulator,
    empty_group,
    tagged_component,
    type_id,
    the_criteria,
    type_properties,
    storable_factory,
    this->replicator_
    ),
  CORBA::NO_MEMORY());
  return objectGroup;
}

TAO::PG_Object_Group_Storable *
TAO::FT_PG_Group_Factory::restore_persistent_group (
      PortableGroup::ObjectGroupId group_id,
      CORBA::ORB_ptr orb,
      PortableGroup::FactoryRegistry_ptr factory_registry,
      TAO::PG_Object_Group_Manipulator & manipulator,
      TAO::Storable_Factory & storable_factory)
{
  TAO::PG_Object_Group_Storable * objectGroup = 0;
  ACE_NEW_THROW_EX (
    objectGroup,
    TAO::FT_PG_Object_Group_Storable (
      group_id,
      orb,
      factory_registry,
      manipulator,
      storable_factory,
      this->replicator_
      ),
    CORBA::NO_MEMORY());
  return objectGroup;
}

TAO_END_VERSIONED_NAMESPACE_DECL