Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add TypeDictionary to backup if missing #20

Merged
merged 1 commit into from
Sep 11, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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