Anúncios

Correction: sample-exam-20-21-dad.pdf

16 novembro 2021, 14:01 Luís Eduardo Teixeira Rodrigues

Dear all, I have just realized that the "sample-exam-20-21-dad.pdf" was bogus (it was a draft and not the final version). I have now posted the corrected version online. Sorry for this mistake.


Project Demo Locations

16 novembro 2021, 12:32 João Coelho Garcia

The project demos discussions will take place in the following labs:

  • Alameda: Lab.7 (Nov, 18th and 19th)

  • Taguspark: Lab. 1.15 (Nov. 17th)


Project Demos Calendar

15 novembro 2021, 08:43 João Coelho Garcia

In the project section there is a new sub-page with links to project demo calendars for both campi (Taguspark and Alameda). Please add your group number to the preferred slot in the campus you are enrolled in.


Exam and study material for the exam

12 novembro 2021, 20:51 Luís Eduardo Teixeira Rodrigues

The registrations for the exam are open till November 18. Registration is mandatory!


I have posted in the "theory classes" section several material to help you prepare for the exam, including: a small guide to the course, slides used in previous years, sample exams (with solutions), and some additional papers.


IMPORTANT UPDATE TO THE PROJECT

29 outubro 2021, 11:31 João Coelho Garcia

In order to allow groups to correctly extend the project to support the storage replication and fault tolerance
functionality being developing, it was necessary to add a Storage Proxy component to the Worker nodes
 interposed between the operator (running in the Worker) and the gRPC storage client that connects to the remote storage nodes. The storage proxy will be called by the operator and w

This will lead to more useful and cleaner solutions.
It represents a small change in the project implementation but one that will make the remaining DAD project work simpler for you.

The storage proxy implements an interface with the same signature as the storage but will provide additional functionality.
 This storage stub serves 2 purposes:
1) Deal with the fault tolerance of the server nodes by ensuring that an operator request to the storage is forwarded
 to an active storage node. When an Operator performs a read, write or updateIfValueIs call, the proxy will find the correct
storage server to perform the call (similar to the previous locationFunction) even in the presence of failed storage servers.


2) Find the correct version of data at the storage.
When an operator requests a read operation it can specify a version or leave a null version. (versionNumber = -1 and replicaId = -1). If the version is not null, the storage proxy should read from storage the requested version. If the version is null and no operator who processed this request has previously read this record, then the latest available version should be read. If the version is null and some upstream operator has read this record, then the same version as the one earlier read should be read from storage.
You should extend the DIDAMetaRecord class to include information that allows a downstream operator to read the same version of a record as an upstream operator of the same request. Each request's MetaRecord is passed to the Storage Proxy in it's constructor. Note that each Operator class instance has its specific storage proxy instance and therefore should also be specific of each request.


The storage proxy will have to be passed to the Operator in the Operator configuration operation (called ConfigureStorage) whose signature, from now on, only includes an IDIDAStorage interface parameter. Hence the Operator interface had to be slightly revised:

    public interface IDIDAOperator {
        // the meta-record, the input and the output of the previous operator are available in the DIDARequest
        // the return value is this Operator return value which the worker should add to the DIDARequest before
        // forwarding it to the next worker/operator.
        public string ProcessRecord(DIDAMetaRecord meta, string input, string previousOperatorOutput);

        public void ConfigureStorage(IDIDAStorage storageProxy);
    }

Note that now each time that the an Operator wants to access the platform's storage it only needs to call the Storage Proxy and no longer use the locationFuction. The LibDIDAWorker library has more data structures but these should be transparent to your solutions. Note that the Operators are no longer gRPC clients of the storage nodes since they now only interact with the Storage Proxy.

The code available in the course website is already updated to reflect these changes. Take a look in particular at the Operator Sample example in order to understand how this new approach works. All the provided code has been further commented to make this adaptation clearer. It's simpler and cleaner than the previous one and we are confident you will be able to update your current projects very quickly.