cifs in alfresco 4.0 mark rogers senior software engineer, alfresco
TRANSCRIPT
CIFS in Alfresco 4.0
Mark Rogers
Senior Software Engineer, Alfresco
Introduction
CIFS and Alfresco in 4.0
Overview
• Explain some of the issues in previous versions
• Present the options for changes
• How you configure shuffle scenarios
• Q & A
• Lunch!
CIFS and JLAN and Alfresco
JLAN
AlfrescoDB Driver
FTPNFSCIFS
CIFS and JLANFile State Cache
• Packet level metadata• Last modified• File size
• Locks
• Session Information
Protocol Handler
Alfresco
CIFS
File State Cache
CIFS v Alfresco
CIFS• File/Folder• Hard coded metadata• No Versioning• Packet Level Protocol• Create, Read, Write, • Delete, Rename• Many levels of locking• Multiple separate
operations.
• Body Level Two• Body Level Three
• Body Level Four
Alfresco• Content and metadata• Versioning• Stream Based• Optimistic locking• Many associations• Coarse transactions
CIFS Create ShuffleCIFS Operations
• File Exists
File A
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
File A Temp
File
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Renamed
File A Temp
File
Old File
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Renamed
• Temp File
moved into place
File A Temp
File
Old File
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Renamed
• Temp File
moved into place
• Existing file
deleted
File A Temp
File
Old File
Issues
CIFS and Alfresco
Issues• Automated Testing
• Transaction boundary
• Scenario Handling
• Alfresco Clustering
• Error Handling
• Logging
Issues
Automated testing
• Starting with Alfresco 3.4 there are an increasing set of tests for the Alfresco Content Disk Driver.
Issues• Automated Testing• Clustering• Transaction boundary• Error Handling• Logging• Shuffle Scenarios
Issues
Clustering
• Alfresco dependency upon file state cache reduced/removed.
• JLAN clustered file state cache.
• Fixed Node Monitor
Issues• Automated Testing• Clustering• Transaction boundary• Error Handling• Logging• Shuffle Scenarios
Issues
Transaction boundary
• Moved transaction boundary down to alfresco
• Removed all dependency on transactional data from the file state cache
Issues• Automated Testing• Clustering• Transaction boundary• Error Handling• Logging• Shuffle Scenarios
Issues
Error Handling
• Rework
Issues• Automated Testing• Clustering• Transaction boundary• Error Handling• Logging• Shuffle Scenarios
Issues
Logging
• “Alfresco style” log4j logging for Disk Driver and other alfresco code.
Issues• Automated Testing• Clustering• Transaction boundary• Error Handling• Logging• Shuffle Scenarios
Issues
Shuffle
• A new framework/engine for dealing with “shuffle scenarios”
• Remove all hard coded “shuffle logic
• Move all shuffle state out of the transactional layers.
Issues• Automated Testing• Clustering• Transaction boundary• Error Handling• Logging• Shuffle Scenarios
CIFS Shuffles
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Renamed
• Temp File
moved into place
• Existing file
deleted
File A Temp
File
Old File
CIFS Rename ShuffleCIFS Operations
• File Exists
• Rename File
• Create New File
• Delete Temp File
• Scenario Fires
File A File A
~
CIFS Shuffles
Approaches• The sausage machine • The “watchers”
CIFS Shuffles
Shuffle
• Simple operations such as “does file A exist” need to read the cached instructions in the pipeline in addition to getting the state from the repo…
• Data loss on crashing!
The sausage machine
• CIFS Commands go into a pipeline and once we have a complete scenario we update the repo with a complete coarse grained transaction.
CIFS Shuffles
Shuffle
• Scenarios compete
• At the end of each command alfresco is in a known persistent state.
• As and when scenarios fire they can “counter transact” previous behaviour.
The watchers
• CIFS Commands go through a set of scenarios which say what to do. The highest priority scenario wins.
• The scenarios contain their own state.
• Many scenarios run at once
CIFS Create ShuffleCIFS Operations
• File Exists
File A
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
File A Temp
File
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Rename
• Scenario Fires
File A Temp
File
Old File
1.Copy Content
2.Rename temp file
to Old File
3.Rename File A to
Temp File
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Rename
• Scenario Fires
• Temp File
moved into place
• Existing file
deleted
File A Temp
File
Old File
1.Copy Content
2.Rename temp file 3.Rename File A
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Rename
• Scenario Fires
• Temp File
moved into place
File A Temp
File
Old File
CIFS Create ShuffleCIFS Operations
• File Exists
• Create Temp File
• Rename
• Scenario Fires
• Temp File
moved into place
• Old file deleted
File A
Old File
Architecture
JLAN
Buffered Content Disk Driver
Non Transactional Disk Driver
Content Disk Driver 2
Filesystem Command Executor
Rule Evaluator
Scenario
CIFS Shuffles
Scenarios• Scenario Create• Scenario Rename• Scenario Create Delete Rename• Scenario Double Rename• Scenario Open File• Scenario Simple Non Buffered
• And others …
Configuration
Network-protocol-context.xml <property name="scenarios"> <list> <!-- TextEdit Mac Lion --> <bean id="tempDeleteShuffle" class="org.alfresco.filesys.repo.rules.ScenarioTempDeleteShuffle"> <property name="pattern"><value>^.*\.txt$</value></property> <property name="tempDirPattern"><value>.*(\\\..*\\)+.*</value></property> <property name="timeout"><value>60000</value></property> <property name="ranking"><value>HIGH</value></property> </bean> <!-- Excel 2003 --> <bean id="createShuffleExcel2003" class="org.alfresco.filesys.repo.rules.ScenarioCreateShuffle"> <property name="pattern"><value>[0-9A-F]{8}+$</value></property> <property name="timeout"><value>60000</value></property> <property name="ranking"><value>HIGH</value></property> </bean> <!-- Word 2003 --> <bean id="createShuffle2003" class="org.alfresco.filesys.repo.rules.ScenarioCreateShuffle"> <property name="pattern"><value>~WRD.*.TMP</value></property> <property name="timeout"><value>60000</value></property> <property name="ranking"><value>HIGH</value></property> </bean>
Scenario Instance/** * A scenario is a factory for scenario instances. * */public interface Scenario{ /** * Create a new ScenarioInstance * <p> * If the scenario is interested in the specified operation then * return a new scenario instance. * @param currentInstances the current instances of all scenarios. * @param operation the operation to be performed * @return the scenario instance or null if a new instance is not required. */ ScenarioInstance createInstance(EvaluatorContext ctx, Operation operation); }
Scenario/** * A scenario instance is an active scenario. It has a ranking, an * evaluate method and knows whether it is complete. * <p> * The evaluate method is called repeatedly as operations are processed. */public interface ScenarioInstance{ /** * Get the Ranking * @return */ public Ranking getRanking(); /** * evaluate the scenario against the current operation * * @param operation */ public Command evaluate(Operation operation); /** * Is the scenario complete? * * @return */ public boolean isComplete(); }
Lunch !