Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
07/25/12 14:12:47 (12 years ago)
Author:
fschoepp
Message:

#1888:

  • Added IConnectionProvider interface + implementation based on jheinzelreiters transaction management
  • Fixed transaction being promoted to dtc; transactions enabled again
  • Changed HiveDao: transactions are managed properly
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/OaaS/HeuristicLab.Services.Hive/3.3/HiveService.cs

    r8266 r8326  
    2828using DA = HeuristicLab.Services.Hive.DataAccess;
    2929using DT = HeuristicLab.Services.Hive.DataTransfer;
     30using System.Transactions;
    3031
    3132
     
    6364    public Guid AddTask(Task task, TaskData taskData, IEnumerable<Guid> resourceIds) {
    6465      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     66      Guid currentUserId = userManager.CurrentUserId;
    6567      return trans.UseTransaction(() => {
    6668        task.Id = dao.AddTask(task);
     
    7173        }
    7274        dao.AddTaskData(taskData);
    73         dao.UpdateTaskState(task.Id, DA.TaskState.Waiting, null, userManager.CurrentUserId, null);
     75        dao.UpdateTaskState(task.Id, DA.TaskState.Waiting, null, currentUserId, null);
    7476        return taskData.TaskId;
    7577      }, false, true);
     
    181183
    182184    public Task UpdateTaskState(Guid taskId, TaskState taskState, Guid? slaveId, Guid? userId, string exception) {
    183       authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
    184       author.AuthorizeForTask(taskId, Permission.Full);
     185      using (var ts = new TransactionScope(TransactionScopeOption.Suppress)) {
     186        authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
     187        author.AuthorizeForTask(taskId, Permission.Full);
     188      }
    185189      return trans.UseTransaction(() => {
    186190        Task task = dao.UpdateTaskState(taskId, DataTransfer.Convert.ToEntity(taskState), slaveId, userId, exception);
     
    245249      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client, HiveRoles.Slave);
    246250      author.AuthorizeForTask(taskId, Permission.Full);
    247       trans.UseTransaction(() => {
    248         Task task = dao.UpdateTaskState(taskId, DA.TaskState.Waiting, null, userManager.CurrentUserId, string.Empty);
     251      Guid currentUserId = userManager.CurrentUserId;
     252      trans.UseTransaction(() => {
     253        Task task = dao.UpdateTaskState(taskId, DA.TaskState.Waiting, null, currentUserId, string.Empty);
    249254        task.Command = null;
    250255        dao.UpdateTask(task);
     
    320325    public void GrantPermission(Guid jobId, Guid grantedUserId, Permission permission) {
    321326      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     327      Guid currentUserId = userManager.CurrentUserId;
    322328      trans.UseTransaction(() => {
    323329        Job job = dao.GetJob(jobId);
    324330        if (job == null) throw new FaultException<FaultReason>(new FaultReason("Could not find task with id " + jobId));
    325         Permission perm = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, userManager.CurrentUserId));
     331        Permission perm = DT.Convert.ToDto(dao.GetPermissionForJob(job.Id, currentUserId));
    326332        if (perm != Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
    327         dao.SetJobPermission(jobId, userManager.CurrentUserId, grantedUserId, DT.Convert.ToEntity(permission));
     333        dao.SetJobPermission(jobId, currentUserId, grantedUserId, DT.Convert.ToEntity(permission));
    328334      });
    329335    }
     
    331337    public void RevokePermission(Guid jobId, Guid grantedUserId) {
    332338      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     339      Guid currentUserId = userManager.CurrentUserId;
    333340      trans.UseTransaction(() => {
    334341        Job job = dao.GetJob(jobId);
    335342        if (job == null) throw new FaultException<FaultReason>(new FaultReason("Could not find task with id " + jobId));
    336         DA.Permission perm = dao.GetPermissionForJob(job.Id, userManager.CurrentUserId);
     343        DA.Permission perm = dao.GetPermissionForJob(job.Id, currentUserId);
    337344        if (perm != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permissions for this experiment"));
    338         dao.SetJobPermission(jobId, userManager.CurrentUserId, grantedUserId, DA.Permission.NotAllowed);
     345        dao.SetJobPermission(jobId, currentUserId, grantedUserId, DA.Permission.NotAllowed);
    339346      });
    340347    }
     
    342349    public IEnumerable<JobPermission> GetJobPermissions(Guid jobId) {
    343350      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    344       return trans.UseTransaction(() => {
    345         DA.Permission currentUserPermission = dao.GetPermissionForJob(jobId, userManager.CurrentUserId);
     351      Guid currentUserId = userManager.CurrentUserId;
     352      return trans.UseTransaction(() => {
     353        DA.Permission currentUserPermission = dao.GetPermissionForJob(jobId, currentUserId);
    346354        if (currentUserPermission != DA.Permission.Full) throw new FaultException<FaultReason>(new FaultReason("Not allowed to list permissions for this experiment"));
    347355        return dao.GetJobPermissions(x => x.JobId == jobId);
     
    421429      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
    422430      return trans.UseTransaction(() => {
    423         plugin.UserId = userManager.CurrentUserId;
     431        using (var ts = new TransactionScope(TransactionScopeOption.Suppress)) {
     432          plugin.UserId = userManager.CurrentUserId;
     433        }
    424434        plugin.DateCreated = DateTime.Now;
    425435
     
    476486    public void GrantResourcePermissions(Guid resourceId, Guid[] grantedUserIds) {
    477487      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     488      Guid currentUserId = userManager.CurrentUserId;
    478489      trans.UseTransaction(() => {
    479490        Resource resource = dao.GetResource(resourceId);
    480491        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
    481         if (resource.OwnerUserId != userManager.CurrentUserId && !authen.IsInRole(HiveRoles.Administrator)) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permission for this resource"));
     492        if (resource.OwnerUserId != currentUserId && !authen.IsInRole(HiveRoles.Administrator)) throw new FaultException<FaultReason>(new FaultReason("Not allowed to grant permission for this resource"));
    482493        foreach (Guid id in grantedUserIds)
    483           dao.AddResourcePermission(new ResourcePermission { ResourceId = resourceId, GrantedByUserId = userManager.CurrentUserId, GrantedUserId = id });
     494          dao.AddResourcePermission(new ResourcePermission { ResourceId = resourceId, GrantedByUserId = currentUserId, GrantedUserId = id });
    484495      });
    485496    }
     
    487498    public void RevokeResourcePermissions(Guid resourceId, Guid[] grantedUserIds) {
    488499      authen.AuthenticateForAnyRole(HiveRoles.Administrator, HiveRoles.Client);
     500      Guid currentUserId = userManager.CurrentUserId;
    489501      trans.UseTransaction(() => {
    490502        Resource resource = dao.GetResource(resourceId);
    491503        if (resource == null) throw new FaultException<FaultReason>(new FaultReason("Could not find resource with id " + resourceId));
    492         if (resource.OwnerUserId != userManager.CurrentUserId && !authen.IsInRole(HiveRoles.Administrator)) throw new FaultException<FaultReason>(new FaultReason("Not allowed to revoke permission for this resource"));
     504        if (resource.OwnerUserId != currentUserId && !authen.IsInRole(HiveRoles.Administrator)) throw new FaultException<FaultReason>(new FaultReason("Not allowed to revoke permission for this resource"));
    493505        foreach (Guid id in grantedUserIds)
    494506          dao.DeleteResourcePermission(resourceId, id);
Note: See TracChangeset for help on using the changeset viewer.