Skip to content

Commit

Permalink
Add TypeDictionary to backup if missing
Browse files Browse the repository at this point in the history
  • Loading branch information
fh-ms committed Sep 11, 2023
1 parent 86f3184 commit 9f8d8ee
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@
import static org.eclipse.serializer.util.X.mayNull;
import static org.eclipse.serializer.util.X.notNull;

import org.eclipse.store.afs.nio.types.NioFileSystem;
import org.eclipse.serializer.afs.types.ADirectory;
import org.eclipse.serializer.afs.types.AFile;
import org.eclipse.serializer.afs.types.AFileSystem;
import org.eclipse.serializer.persistence.internal.PersistenceTypeDictionaryFileHandler;
import org.eclipse.store.afs.nio.types.NioFileSystem;


public interface StorageBackupFileProvider extends StorageFileProvider
Expand All @@ -48,6 +48,8 @@ public StorageBackupTransactionsFile provideBackupTransactionsFile(
int channelIndex
);

public AFile provideTypeDictionaryFile();



public static StorageBackupFileProvider New()
Expand Down Expand Up @@ -137,6 +139,12 @@ public StorageBackupTransactionsFile provideBackupTransactionsFile(

return StorageBackupTransactionsFile.New(file, channelIndex);
}

@Override
public AFile provideTypeDictionaryFile()
{
return this.defineTypeDictionaryFile();
}

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import org.eclipse.serializer.afs.types.AFile;
import org.eclipse.serializer.collections.BulkList;
import org.eclipse.serializer.collections.EqHashTable;
import org.eclipse.serializer.persistence.types.PersistenceTypeDictionaryExporter;
import org.eclipse.serializer.persistence.types.PersistenceTypeDictionaryStorer;
import org.eclipse.serializer.util.X;
import org.eclipse.serializer.util.logging.Logging;
import org.eclipse.store.storage.exceptions.StorageExceptionBackup;
Expand Down Expand Up @@ -59,11 +61,7 @@ public void deleteFile(
StorageLiveChannelFile<?> file
);

public default StorageBackupHandler start()
{
this.setRunning(true);
return this;
}
public StorageBackupHandler start();

public default StorageBackupHandler stop()
{
Expand All @@ -86,7 +84,8 @@ public static StorageBackupHandler New(
final StorageBackupItemQueue itemQueue ,
final StorageOperationController operationController,
final StorageWriteController writeController ,
final StorageDataFileValidator.Creator validatorCreator
final StorageDataFileValidator.Creator validatorCreator ,
final StorageTypeDictionary typeDictionary
)
{
final StorageBackupFileProvider backupFileProvider = backupSetup.backupFileProvider();
Expand All @@ -102,24 +101,27 @@ public static StorageBackupHandler New(
notNull(itemQueue) ,
notNull(operationController),
notNull(writeController) ,
notNull(validatorCreator)
notNull(validatorCreator) ,
notNull(typeDictionary)
);
}

public final class Default implements StorageBackupHandler, StorageBackupInventory
public final class Default implements StorageBackupHandler, StorageBackupInventory, PersistenceTypeDictionaryStorer
{
private final static Logger logger = Logging.getLogger(Default.class);

///////////////////////////////////////////////////////////////////////////
// instance fields //
////////////////////

private final StorageBackupSetup backupSetup ;
private final ChannelInventory[] channelInventories ;
private final StorageBackupItemQueue itemQueue ;
private final StorageOperationController operationController;
private final StorageWriteController writeController ;
private final StorageDataFileValidator.Creator validatorCreator ;
private final StorageBackupSetup backupSetup ;
private final ChannelInventory[] channelInventories ;
private final StorageBackupItemQueue itemQueue ;
private final StorageOperationController operationController ;
private final StorageWriteController writeController ;
private final StorageDataFileValidator.Creator validatorCreator ;
private final StorageTypeDictionary typeDictionary ;
private final PersistenceTypeDictionaryExporter typeDictionaryExporter;

private boolean running; // being "ordered" to run.
private boolean active ; // being actually active, e.g. executing the last loop before running check.
Expand All @@ -137,16 +139,20 @@ public final class Default implements StorageBackupHandler, StorageBackupInvento
final StorageBackupItemQueue itemQueue ,
final StorageOperationController operationController,
final StorageWriteController writeController ,
final StorageDataFileValidator.Creator validatorCreator
final StorageDataFileValidator.Creator validatorCreator ,
final StorageTypeDictionary typeDictionary
)
{
super();
this.channelInventories = channelInventories ;
this.backupSetup = backupSetup ;
this.itemQueue = itemQueue ;
this.operationController = operationController;
this.writeController = writeController ;
this.validatorCreator = validatorCreator ;
this.channelInventories = channelInventories ;
this.backupSetup = backupSetup ;
this.itemQueue = itemQueue ;
this.operationController = operationController;
this.writeController = writeController ;
this.validatorCreator = validatorCreator ;
this.typeDictionary = typeDictionary ;

this.typeDictionaryExporter = PersistenceTypeDictionaryExporter.New(this);
}


Expand All @@ -173,6 +179,14 @@ public final synchronized boolean isActive()
return this.active;
}

@Override
public final StorageBackupHandler start()
{
this.ensureTypeDictionaryBackup();
this.setRunning(true);
return this;
}

/**
* Initiate a controlled shutdown of the StorageBackupHandler
* after processing all currently enqueued items.
Expand Down Expand Up @@ -238,6 +252,12 @@ public void synchronize(final StorageInventory storageInventory)
}
}

@Override
public void storeTypeDictionary(final String typeDictionaryString)
{
this.setup().backupFileProvider().provideTypeDictionaryIoHandler().storeTypeDictionary(typeDictionaryString);
}

@Override
public void run()
{
Expand Down Expand Up @@ -279,6 +299,19 @@ public void run()

}

private void ensureTypeDictionaryBackup()
{
if(!this.setup().backupFileProvider().provideTypeDictionaryFile().exists())
{
logger.debug("Creating new type dictionary backup");
this.typeDictionaryExporter.exportTypeDictionary(this.typeDictionary);
}
else
{
logger.debug("Existing type dictionary backup found");
}
}

private void tryInitialize(final int channelIndex)
{
final ChannelInventory backupInventory = this.channelInventories[channelIndex];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package org.eclipse.store.storage.types;

import static org.eclipse.serializer.util.X.notNull;

/*-
* #%L
* Eclipse Store Storage
Expand All @@ -22,8 +24,6 @@

import org.eclipse.serializer.afs.types.ADirectory;

import static org.eclipse.serializer.util.X.notNull;

public interface StorageBackupSetup
{
public StorageBackupFileProvider backupFileProvider();
Expand All @@ -35,7 +35,8 @@ public StorageFileWriter.Provider setupWriterProvider(
public StorageBackupHandler setupHandler(
StorageOperationController operationController ,
StorageWriteController writeController ,
StorageDataFileValidator.Creator backupDataFileValidatorCreator
StorageDataFileValidator.Creator backupDataFileValidatorCreator,
StorageTypeDictionary storageTypeDictionary
);


Expand Down Expand Up @@ -135,7 +136,8 @@ public StorageFileWriter.Provider setupWriterProvider(
public StorageBackupHandler setupHandler(
final StorageOperationController operationController,
final StorageWriteController writeController ,
final StorageDataFileValidator.Creator validatorCreator
final StorageDataFileValidator.Creator validatorCreator ,
final StorageTypeDictionary typeDictionary
)
{
final int channelCount = operationController.channelCountProvider().getChannelCount();
Expand All @@ -145,7 +147,8 @@ public StorageBackupHandler setupHandler(
this.itemQueue ,
operationController,
writeController ,
validatorCreator
validatorCreator ,
typeDictionary
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,6 @@
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicLong;

import org.eclipse.store.storage.exceptions.StorageExceptionInitialization;
import org.eclipse.store.storage.exceptions.StorageExceptionNotAcceptingTasks;
import org.eclipse.store.storage.exceptions.StorageExceptionNotRunning;
import org.eclipse.serializer.afs.types.AFileSystem;
import org.eclipse.serializer.meta.XDebug;
import org.eclipse.serializer.persistence.binary.types.ObjectIdsSelector;
Expand All @@ -37,6 +34,9 @@
import org.eclipse.serializer.persistence.types.Unpersistable;
import org.eclipse.serializer.reference.Referencing;
import org.eclipse.serializer.util.logging.Logging;
import org.eclipse.store.storage.exceptions.StorageExceptionInitialization;
import org.eclipse.store.storage.exceptions.StorageExceptionNotAcceptingTasks;
import org.eclipse.store.storage.exceptions.StorageExceptionNotRunning;
import org.slf4j.Logger;

// (21.03.2016 TM)TODO: what is the difference between ~Manager and ~Controller here? Merge into Controller or comment.
Expand Down Expand Up @@ -346,7 +346,8 @@ private StorageBackupHandler provideBackupHandler()
this.backupHandler = this.backupSetup.setupHandler(
this.operationController,
this.writeController,
this.backupDataFileValidatorCreator
this.backupDataFileValidatorCreator,
this.typeDictionary()
);
}

Expand Down

0 comments on commit 9f8d8ee

Please sign in to comment.