@@ -161,6 +161,8 @@ public void startup() {
161161 timeOffset = System .currentTimeMillis () - hazelcastInstance .getCluster ().getClusterTime ();
162162 cachedClusterNodes .put (getLocalNodeName (), hazelcastInstance .getCluster ().getLocalMember ());
163163
164+ membershipListenerRegistration = hazelcastInstance .getCluster ().addMembershipListener (this );
165+
164166 OServer .registerServerInstance (getLocalNodeName (), serverInstance );
165167
166168 final IMap <String , Object > configurationMap = getConfigurationMap ();
@@ -175,13 +177,13 @@ public void startup() {
175177
176178 messageService = new OHazelcastDistributedMessageService (this );
177179
180+ // PUBLISH LOCAL NODE CFG
181+ getConfigurationMap ().put (CONFIG_NODE_PREFIX + getLocalNodeId (), getLocalNodeConfiguration ());
182+
178183 loadDistributedDatabases ();
179184
180185 installNewDatabases ();
181186
182- // REGISTER CURRENT MEMBERS
183- setStatus (STATUS .ONLINE );
184-
185187 super .startup ();
186188
187189 } catch (FileNotFoundException e ) {
@@ -214,6 +216,8 @@ public void shutdown() {
214216 hazelcastInstance .getCluster ().removeMembershipListener (membershipListenerRegistration );
215217 }
216218 setStatus (STATUS .OFFLINE );
219+
220+ getConfigurationMap ().remove (CONFIG_NODE_PREFIX + getLocalNodeId ());
217221 }
218222
219223 @ Override
@@ -249,7 +253,6 @@ public ODocument getLocalNodeConfiguration() {
249253
250254 nodeCfg .field ("id" , getLocalNodeId ());
251255 nodeCfg .field ("name" , getLocalNodeName ());
252- nodeCfg .field ("status" , getStatus ());
253256 nodeCfg .field ("startedOn" , startedOn );
254257
255258 List <Map <String , Object >> listeners = new ArrayList <Map <String , Object >>();
@@ -287,7 +290,8 @@ public void setStatus(final STATUS iStatus) {
287290
288291 status = iStatus ;
289292
290- getConfigurationMap ().put (CONFIG_NODE_PREFIX + getLocalNodeId (), getLocalNodeConfiguration ());
293+ // DON'T PUT THE STATUS IN CFG ANYMORE
294+ // getConfigurationMap().put(CONFIG_NODE_PREFIX + getLocalNodeId(), getLocalNodeConfiguration());
291295
292296 ODistributedServerLog .warn (this , getLocalNodeName (), null , DIRECTION .NONE , "updated node status to '%s'" , status );
293297 }
@@ -421,7 +425,15 @@ public void memberRemoved(final MembershipEvent iEvent) {
421425 getNodeName (iEvent .getMember ()));
422426
423427 final Member member = iEvent .getMember ();
424- cachedClusterNodes .remove (getNodeName (member ));
428+
429+ final String nodeName = getNodeName (member );
430+ cachedClusterNodes .remove (nodeName );
431+
432+ for (String dbName : messageService .getDatabases ()) {
433+ final OHazelcastDistributedDatabase db = messageService .getDatabase (dbName );
434+ db .removeNodeInConfiguration (nodeName , false );
435+ }
436+
425437 OClientConnectionManager .instance ().pushDistribCfg2Clients (getClusterConfiguration ());
426438 }
427439
@@ -465,10 +477,11 @@ public void entryUpdated(EntryEvent<String, Object> iEvent) {
465477 public void entryRemoved (EntryEvent <String , Object > iEvent ) {
466478 final String key = iEvent .getKey ();
467479 if (key .startsWith (CONFIG_NODE_PREFIX )) {
480+ final String nName = getNodeName (iEvent .getMember ());
468481 ODistributedServerLog .info (this , getLocalNodeName (), null , DIRECTION .NONE , "removed node configuration id=%s name=%s" ,
469- iEvent .getMember (), getNodeName ( iEvent . getMember ()) );
482+ iEvent .getMember (), nName );
470483
471- cachedClusterNodes .remove (getNodeName ( iEvent . getMember ()) );
484+ cachedClusterNodes .remove (nName );
472485
473486 } else if (key .startsWith (CONFIG_DATABASE_PREFIX )) {
474487 synchronized (cachedDatabaseConfiguration ) {
@@ -486,9 +499,8 @@ public boolean isNodeAvailable(final String iNodeName) {
486499 return cachedClusterNodes .containsKey (iNodeName );
487500 }
488501
489- public boolean isOfflineNodeById (final String iNodeId ) {
490- final ODocument cfg = getNodeConfigurationById (iNodeId );
491- return cfg == null || !cfg .field ("status" ).equals (STATUS .ONLINE .toString ());
502+ public boolean isOffline () {
503+ return status != STATUS .ONLINE ;
492504 }
493505
494506 public void waitUntilOnline () throws InterruptedException {
@@ -573,16 +585,25 @@ protected void installNewDatabases() {
573585
574586 // LOCKING THIS RESOURCE PREVENT CONCURRENT INSTALL OF THE SAME DB
575587 synchronized (installDatabaseLock ) {
576- final Set <String > configuredDatabases = serverInstance .getAvailableStorageNames ().keySet ();
577-
578588 for (Entry <String , Object > entry : getConfigurationMap ().entrySet ()) {
579589 if (entry .getKey ().startsWith (CONFIG_DATABASE_PREFIX )) {
580590 final String databaseName = entry .getKey ().substring (CONFIG_DATABASE_PREFIX .length ());
581591
582- if (!configuredDatabases .contains (databaseName )) {
583- final ODocument config = (ODocument ) entry .getValue ();
584- final Boolean autoDeploy = config .field ("autoDeploy" );
585- if (autoDeploy != null && autoDeploy ) {
592+ final ODocument config = (ODocument ) entry .getValue ();
593+ final Boolean autoDeploy = config .field ("autoDeploy" );
594+
595+ if (autoDeploy != null && autoDeploy ) {
596+ final Boolean hotAlignment = config .field ("hotAlignment" );
597+ final String dbPath = serverInstance .getDatabaseDirectory () + databaseName ;
598+
599+ final Set <String > configuredDatabases = serverInstance .getAvailableStorageNames ().keySet ();
600+ if (configuredDatabases .contains (databaseName ) && hotAlignment != null && !hotAlignment ) {
601+ // DROP THE DATABASE ON CURRENT NODE
602+ final ODatabaseDocumentTx db = new ODatabaseDocumentTx ("local:" + dbPath );
603+ db .drop ();
604+ }
605+
606+ if (!configuredDatabases .contains (databaseName )) {
586607
587608 final OHazelcastDistributedDatabase distrDatabase = messageService .registerDatabase (databaseName );
588609
@@ -593,8 +614,6 @@ protected void installNewDatabases() {
593614 final Map <String , OBuffer > results = (Map <String , OBuffer >) sendRequest (databaseName , null ,
594615 new ODeployDatabaseTask (), EXECUTION_MODE .RESPONSE );
595616
596- final String dbPath = serverInstance .getDatabaseDirectory () + databaseName ;
597-
598617 // EXTRACT THE REAL RESULT
599618 OBuffer result = null ;
600619 for (Entry <String , OBuffer > r : results .entrySet ())
@@ -637,6 +656,9 @@ protected void installNewDatabases() {
637656 }
638657 }
639658 }
659+
660+ // REGISTER CURRENT MEMBERS
661+ setStatus (STATUS .ONLINE );
640662 }
641663
642664 @ Override
0 commit comments