+ @Override
+ public void onGlobalContextUpdated(SchemaContext schemaContext) {
+ actorContext.setSchemaContext(schemaContext);
+ }
+
+ @Override
+ public void onDatastoreContextUpdated(DatastoreContext context) {
+ LOG.info("DatastoreContext updated for data store {}", actorContext.getDataStoreType());
+
+ actorContext.setDatastoreContext(context);
+ datastoreConfigMXBean.setContext(context);
+ }
+
+ @Override
+ public void close() {
+ datastoreConfigMXBean.unregisterMBean();
+ datastoreInfoMXBean.unregisterMBean();
+
+ if(closeable != null) {
+ try {
+ closeable.close();
+ } catch (Exception e) {
+ LOG.debug("Error closing insance", e);
+ }
+ }
+
+ actorContext.shutdown();
+ }
+
+ @VisibleForTesting
+ ActorContext getActorContext() {
+ return actorContext;
+ }
+
+ public void waitTillReady(){
+ LOG.info("Beginning to wait for data store to become ready : {}", type);
+
+ try {
+ if (waitTillReadyCountDownLatch.await(waitTillReadyTimeInMillis, TimeUnit.MILLISECONDS)) {
+ LOG.debug("Data store {} is now ready", type);
+ } else {
+ LOG.error("Shared leaders failed to settle in {} seconds, giving up", TimeUnit.MILLISECONDS.toSeconds(waitTillReadyTimeInMillis));
+ }
+ } catch (InterruptedException e) {
+ LOG.error("Interrupted while waiting for shards to settle", e);
+ }
+ }
+
+ @VisibleForTesting
+ public CountDownLatch getWaitTillReadyCountDownLatch() {
+ return waitTillReadyCountDownLatch;