cifs in alfresco 4.0 mark rogers senior software engineer, alfresco

Post on 25-Dec-2015

220 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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 !

top related