Changeset 1131


Ignore:
Timestamp:
01/14/09 21:27:54 (12 years ago)
Author:
svonolfe
Message:

fixed race condition issues, improved performance (#372)

Location:
trunk/sources/HeuristicLab.Hive.Server.ADODataAccess
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/CachedDataAdapter.cs

    r1128 r1131  
    3636    where RowT : System.Data.DataRow
    3737    where ObjT : IHiveObject, new() {
    38     protected CacheT cache =
     38    protected static CacheT cache =
    3939      new CacheT();
    4040
    41     protected IDictionary<long, DataTable> dataTable =
    42       new Dictionary<long, DataTable>();
     41    private static bool cacheFilled = false;
     42
     43    protected DataTable dataTable =
     44      new DataTable();
    4345
    4446    protected ICollection<ICachedDataAdapter> parentAdapters =
    4547      new List<ICachedDataAdapter>();
    4648
     49    [MethodImpl(MethodImplOptions.Synchronized)]
    4750    protected CachedDataAdapter() {
    48       FillCache();
     51      if (!cacheFilled) {
     52        FillCache();
     53        cacheFilled = true;
     54      }
    4955
    5056      ServiceLocator.GetTransactionManager().OnUpdate +=
     
    5258    }
    5359
    54     [MethodImpl(MethodImplOptions.Synchronized)]
    5560    protected virtual RowT FindSingleRow(Selector dbSelector,
    5661      Selector cacheSelector) {
     
    6772    }
    6873
    69     [MethodImpl(MethodImplOptions.Synchronized)]
    7074    protected virtual IEnumerable<RowT> FindMultipleRows(Selector dbSelector,
    7175        Selector cacheSelector) {
     
    9195      if (row != null) {
    9296        ObjT obj = new ObjT();
    93         Convert(row, obj);
    94 
     97        obj = Convert(row, obj);
     98       
    9599        return obj;
    96100      } else {
     
    99103    }
    100104
    101     [MethodImpl(MethodImplOptions.Synchronized)]
    102105    protected virtual ICollection<ObjT> FindMultiple(Selector dbSelector,
    103106      Selector cacheSelector) {
     
    128131    protected abstract bool PutInCache(ObjT obj);
    129132
    130     [MethodImpl(MethodImplOptions.Synchronized)]
    131133    protected abstract RowT FindCachedById(long id);
    132134
     
    152154    }
    153155
    154     [MethodImpl(MethodImplOptions.Synchronized)]
    155156    protected override RowT GetRowById(long id) {
    156157      RowT row =
     
    184185        obj.Id = (long)row[row.Table.PrimaryKey[0]];
    185186
    186         Convert(obj, row);
     187        ConvertObj(obj, row);
    187188
    188189        if (!IsCached(row))
     
    192193            !PutInCache(obj)) {
    193194          //remove from cache
    194           dataTable[obj.Id].ImportRow(row);
    195           dataTable.Remove(obj.Id);
     195          dataTable.ImportRow(row);
     196          RemoveRowFromCache(row);
    196197
    197198          UpdateRow(row);
    198           RemoveRowFromCache(row);
    199199        } else if (!IsCached(row) &&
    200200          PutInCache(obj)) {
    201201          //add to cache
    202202          cache.ImportRow(row);
    203 
    204           dataTable[obj.Id] = row.Table;
    205203          row.Table.Rows.Remove(row);
    206         }
     204        } 
    207205      }
    208206    }
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientAdapter.cs

    r1122 r1131  
    9292
    9393    #region Overrides
    94     protected override ClientInfo Convert(dsHiveServer.ClientRow row,
     94    protected override ClientInfo ConvertRow(dsHiveServer.ClientRow row,
    9595      ClientInfo client) {
    9696      if(row != null && client != null) {     
     
    138138    }
    139139
    140     protected override dsHiveServer.ClientRow Convert(ClientInfo client,
     140    protected override dsHiveServer.ClientRow ConvertObj(ClientInfo client,
    141141      dsHiveServer.ClientRow row) {
    142142      if (client != null && row != null) {     
     
    162162
    163163    protected override void UpdateRow(dsHiveServer.ClientRow row) {
    164       adapter.Update(row);
     164      Adapter.Update(row);
    165165    }
    166166
     
    176176    protected override dsHiveServer.ClientRow
    177177      InsertNewRowInCache(ClientInfo client) {
    178       dsHiveServer.ClientRow row = cache.NewClientRow();
     178      dsHiveServer.ClientRow row = data.NewClientRow();
    179179      row.ResourceId = client.Id;
    180180      cache.AddClientRow(row);
     
    184184
    185185    protected override void FillCache() {
    186       cache = adapter.GetDataByActive();
     186      Adapter.FillByActive(cache);
    187187    }
    188188
    189189    public override void SyncWithDb() {
    190       adapter.Update(cache);
     190      Adapter.Update(cache);
    191191    }
    192192
     
    197197    protected override IEnumerable<dsHiveServer.ClientRow>
    198198      FindById(long id) {
    199       return adapter.GetDataByResourceId(id);
     199      return Adapter.GetDataByResourceId(id);
    200200    }
    201201
     
    208208      FindAll() {
    209209      return FindMultipleRows(
    210         new Selector(adapter.GetData),
     210        new Selector(Adapter.GetData),
    211211        new Selector(cache.AsEnumerable<dsHiveServer.ClientRow>));
    212212    }
     
    229229      return base.FindSingle(
    230230        delegate() {
    231           return adapter.GetDataById(clientId);
     231          return Adapter.GetDataById(clientId);
    232232        },
    233233        delegate() {
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ClientGroupAdapter.cs

    r995 r1131  
    6767
    6868    #region Overrides
    69     protected override ClientGroup Convert(dsHiveServer.ClientGroupRow row,
     69    protected override ClientGroup ConvertRow(dsHiveServer.ClientGroupRow row,
    7070      ClientGroup clientGroup) {
    7171      if (row != null && clientGroup != null) {
     
    129129    }
    130130
    131     protected override dsHiveServer.ClientGroupRow Convert(ClientGroup clientGroup,
     131    protected override dsHiveServer.ClientGroupRow ConvertObj(ClientGroup clientGroup,
    132132      dsHiveServer.ClientGroupRow row) {
    133133      if (clientGroup != null && row != null) {
     
    211211
    212212      data.AddClientGroupRow(row);
    213       adapter.Update(row);
     213      Adapter.Update(row);
    214214
    215215      return row;
     
    218218    protected override void
    219219      UpdateRow(dsHiveServer.ClientGroupRow row) {
    220       adapter.Update(row);
     220      Adapter.Update(row);
    221221    }
    222222
    223223    protected override IEnumerable<dsHiveServer.ClientGroupRow>
    224224      FindById(long id) {
    225       return adapter.GetDataById(id);
     225      return Adapter.GetDataById(id);
    226226    }
    227227
    228228    protected override IEnumerable<dsHiveServer.ClientGroupRow>
    229229      FindAll() {
    230       return adapter.GetData();
     230      return Adapter.GetData();
    231231    }
    232232    #endregion
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/DBSettings.cs

    r1120 r1131  
    4444    public static String GetConnString(String adress, String catalog, String un, String pw) {
    4545      return "Data Source=" + adress + ";Initial Catalog=" + catalog + ";MultipleActiveResultSets=True;" +
    46         "Persist Security Info=True;User ID=" + un + ";Password=" + pw;
     46        "Asynchronous Processing=True;Persist Security Info=True;User ID=" + un + ";Password=" + pw;
    4747    }
    4848
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/DataAdapterBase.cs

    r1128 r1131  
    2121
    2222using System;
     23using System.Data;
    2324using System.Collections.Generic;
    2425using System.Linq;
     
    3233    where RowT : System.Data.DataRow
    3334    where ObjT : IHiveObject, new() {
    34     protected AdapterT adapter =
    35       new AdapterT();
     35    protected AdapterT Adapter {
     36      get {
     37        return new AdapterT();
     38      }
     39    }
    3640
    3741    #region Abstract methods
    38     protected abstract RowT Convert(ObjT obj, RowT row);
     42    protected abstract RowT ConvertObj(ObjT obj, RowT row);
    3943
    40     protected abstract ObjT Convert(RowT row, ObjT obj);
     44    protected abstract ObjT ConvertRow(RowT row, ObjT obj);
    4145
    4246    [MethodImpl(MethodImplOptions.Synchronized)]
     
    4650    protected abstract void UpdateRow(RowT row);
    4751
    48     [MethodImpl(MethodImplOptions.Synchronized)]
    4952    protected abstract IEnumerable<RowT> FindById(long id);
    5053
    51     [MethodImpl(MethodImplOptions.Synchronized)]
    5254    protected abstract IEnumerable<RowT> FindAll();
    5355    #endregion
     
    5557    protected delegate IEnumerable<RowT> Selector();
    5658
    57     [MethodImpl(MethodImplOptions.Synchronized)]
     59    protected ObjT Convert(RowT row, ObjT obj) {
     60      try {
     61        obj = ConvertRow(row, obj);
     62        return obj;
     63      }
     64      catch (DeletedRowInaccessibleException) {
     65        return default(ObjT);
     66      }
     67      catch (RowNotInTableException) {
     68        return default(ObjT);
     69      }
     70    }
     71
    5872    protected virtual RowT FindSingleRow(Selector selector) {
    5973      RowT row = default(RowT);
     
    7387      if (row != null) {
    7488        ObjT obj = new ObjT();
    75         Convert(row, obj);
     89        obj = Convert(row, obj);
    7690
    7791        return obj;
     
    8195    }
    8296
    83     [MethodImpl(MethodImplOptions.Synchronized)]
    8497    protected virtual ICollection<ObjT> FindMultiple(Selector selector) {
    8598      IEnumerable<RowT> found =
     
    91104      foreach (RowT row in found) {
    92105        ObjT obj = new ObjT();
    93         Convert(row, obj);
    94         result.Add(obj);
     106        obj = Convert(row, obj);
     107        if(obj != null)
     108          result.Add(obj);
    95109      }
    96110
     
    115129        }
    116130
    117         Convert(obj, row);
     131        ConvertObj(obj, row);
    118132
    119133        UpdateRow(row);
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobAdapter.cs

    r1120 r1131  
    7777
    7878    #region Overrides
    79     protected override Job Convert(dsHiveServer.JobRow row,
     79    protected override Job ConvertRow(dsHiveServer.JobRow row,
    8080      Job job) {
    8181      if (row != null && job != null) {
     
    112112    }
    113113
    114     protected override dsHiveServer.JobRow Convert(Job job,
     114    protected override dsHiveServer.JobRow ConvertObj(Job job,
    115115      dsHiveServer.JobRow row) {
    116116      if (job != null && row != null) {
     
    147147
    148148    protected override void UpdateRow(dsHiveServer.JobRow row) {
    149       adapter.Update(row);
     149      Adapter.Update(row);
    150150    }
    151151
     
    160160    protected override dsHiveServer.JobRow
    161161      InsertNewRowInCache(Job job) {
    162       dsHiveServer.JobRow row = cache.NewJobRow();
     162      dsHiveServer.JobRow row = data.NewJobRow();
    163163      cache.AddJobRow(row);
    164164
     
    167167
    168168    protected override void FillCache() {
    169       adapter.FillByActive(cache);
     169      Adapter.FillByActive(cache);
    170170    }
    171171
    172172    public override void SyncWithDb() {
    173       this.adapter.Update(this.cache);
     173      this.Adapter.Update(cache);
    174174    }
    175175
     
    182182    protected override IEnumerable<dsHiveServer.JobRow>
    183183      FindById(long id) {
    184       return adapter.GetDataById(id);
     184      return Adapter.GetDataById(id);
    185185    }
    186186
     
    193193      FindAll() {
    194194      return FindMultipleRows(
    195         new Selector(adapter.GetData),
     195        new Selector(Adapter.GetData),
    196196        new Selector(cache.AsEnumerable<dsHiveServer.JobRow>));
    197197    }
     
    205205          base.FindMultiple(
    206206            delegate() {
    207               return adapter.GetDataBySubjobs(job.Id);
     207              return Adapter.GetDataBySubjobs(job.Id);
    208208            },
    209209            delegate() {
     
    223223         base.FindMultiple(
    224224           delegate() {
    225              return adapter.GetDataByState(state.ToString());
     225             return Adapter.GetDataByState(state.ToString());
    226226           },
    227227           delegate() {
     
    239239          base.FindMultiple(
    240240            delegate() {
    241               return adapter.GetDataByClient(client.Id);
     241              return Adapter.GetDataByClient(client.Id);
    242242            },
    243243            delegate() {
     
    258258          base.FindMultiple(
    259259            delegate() {
    260               return adapter.GetDataByUser(user.Id);
     260              return Adapter.GetDataByUser(user.Id);
    261261            },
    262262            delegate() {
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/JobResultsAdapter.cs

    r1103 r1131  
    4040
    4141    #region Overrides
    42     protected override dsHiveServer.JobResultRow Convert(JobResult result,
     42    protected override dsHiveServer.JobResultRow ConvertObj(JobResult result,
    4343      dsHiveServer.JobResultRow row) {
    4444      if (row != null && result != null) {
     
    7575    }
    7676
    77     protected override JobResult Convert(dsHiveServer.JobResultRow row,
     77    protected override JobResult ConvertRow(dsHiveServer.JobResultRow row,
    7878      JobResult result) {
    7979      if (row != null && result != null) {
     
    106106
    107107    protected override void UpdateRow(dsHiveServer.JobResultRow row) {
    108       adapter.Update(row);
     108      Adapter.Update(row);
    109109    }
    110110
     
    117117
    118118    protected override IEnumerable<dsHiveServer.JobResultRow> FindById(long id) {
    119       return adapter.GetDataById(id);
     119      return Adapter.GetDataById(id);
    120120    }
    121121
    122122    protected override IEnumerable<dsHiveServer.JobResultRow> FindAll() {
    123       return adapter.GetData();
     123      return Adapter.GetData();
    124124    }
    125125    #endregion
     
    140140          base.FindMultiple(
    141141            delegate() {
    142               return adapter.GetDataByJob(job.Id);
     142              return Adapter.GetDataByJob(job.Id);
    143143            });
    144144      }
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/PermissionOwnerAdapter.cs

    r995 r1131  
    4242
    4343    #region Overrides
    44     protected override PermissionOwner Convert(dsHiveServer.PermissionOwnerRow row,
     44    protected override PermissionOwner ConvertRow(dsHiveServer.PermissionOwnerRow row,
    4545      PermissionOwner permOwner) {
    4646      if (row != null && permOwner != null) {
     
    5757    }
    5858
    59     protected override dsHiveServer.PermissionOwnerRow Convert(PermissionOwner permOwner,
     59    protected override dsHiveServer.PermissionOwnerRow ConvertObj(PermissionOwner permOwner,
    6060      dsHiveServer.PermissionOwnerRow row) {
    6161      if (row != null && permOwner != null) {
     
    7979    protected override void
    8080      UpdateRow(dsHiveServer.PermissionOwnerRow row) {
    81       adapter.Update(row);
     81      Adapter.Update(row);
    8282    }
    8383
    8484    protected override IEnumerable<dsHiveServer.PermissionOwnerRow>
    8585      FindById(long id) {
    86       return adapter.GetDataById(id);
     86      return Adapter.GetDataById(id);
    8787    }
    8888
    8989    protected override IEnumerable<dsHiveServer.PermissionOwnerRow>
    9090      FindAll() {
    91       return adapter.GetData();
     91      return Adapter.GetData();
    9292    }
    9393    #endregion
     
    114114        return base.FindSingle(
    115115          delegate() {
    116             return adapter.GetDataByName(name);
     116            return Adapter.GetDataByName(name);
    117117          });
    118118      }
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/ResourceAdapter.cs

    r1096 r1131  
    5353
    5454    #region Overrides
    55     protected override Resource Convert(dsHiveServer.ResourceRow row,
     55    protected override Resource ConvertRow(dsHiveServer.ResourceRow row,
    5656      Resource resource) {
    5757      if (row != null && resource != null) {
     
    6767    }
    6868
    69     protected override dsHiveServer.ResourceRow Convert(Resource resource,
     69    protected override dsHiveServer.ResourceRow ConvertObj(Resource resource,
    7070      dsHiveServer.ResourceRow row) {
    7171      if (resource != null && row != null) {
     
    7878
    7979    protected override void UpdateRow(dsHiveServer.ResourceRow row) {
    80       adapter.Update(row);
     80      Adapter.Update(row);
    8181    }
    8282
     
    9898
    9999    protected override void FillCache() {
    100       cache = adapter.GetDataByActive();
     100      Adapter.FillByActive(cache);
    101101    }
    102102
    103103    public override void SyncWithDb() {
    104       adapter.Update(cache);
     104      Adapter.Update(cache);
    105105    }
    106106
     
    112112    protected override IEnumerable<dsHiveServer.ResourceRow>
    113113      FindById(long id) {
    114       return adapter.GetDataById(id);
     114      return Adapter.GetDataById(id);
    115115    }
    116116
     
    123123      FindAll() {
    124124      return FindMultipleRows(
    125         new Selector(adapter.GetData),
     125        new Selector(Adapter.GetData),
    126126        new Selector(cache.AsEnumerable<dsHiveServer.ResourceRow>));
    127127    }
     
    149149        base.FindSingleRow(
    150150          delegate() {
    151             return adapter.GetDataByName(name);
     151            return Adapter.GetDataByName(name);
    152152          },
    153153          delegate() {
     
    161161      if (row != null) {
    162162        Resource res = new Resource();
    163         Convert(row, res);
     163        res = Convert(row, res);
    164164
    165165        return res;
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/UserAdapter.cs

    r1009 r1131  
    7575
    7676    #region Overrides
    77     protected override User Convert(dsHiveServer.HiveUserRow row,
     77    protected override User ConvertRow(dsHiveServer.HiveUserRow row,
    7878      User user) {
    7979      if (row != null && user != null) {
     
    9393    }
    9494
    95     protected override dsHiveServer.HiveUserRow Convert(User user,
     95    protected override dsHiveServer.HiveUserRow ConvertObj(User user,
    9696      dsHiveServer.HiveUserRow row) {
    9797      if (user != null && row != null) {
     
    120120    protected override void
    121121      UpdateRow(dsHiveServer.HiveUserRow row) {
    122       adapter.Update(row);
     122      Adapter.Update(row);
    123123    }
    124124
    125125    protected override IEnumerable<dsHiveServer.HiveUserRow>
    126126      FindById(long id) {
    127       return adapter.GetDataById(id);
     127      return Adapter.GetDataById(id);
    128128    }
    129129
    130130    protected override IEnumerable<dsHiveServer.HiveUserRow>
    131131      FindAll() {
    132       return adapter.GetData();
     132      return Adapter.GetData();
    133133    }
    134134    #endregion
     
    149149        return base.FindSingle(
    150150          delegate() {
    151             return adapter.GetDataByName(name);
     151            return Adapter.GetDataByName(name);
    152152          });
    153153      }
  • trunk/sources/HeuristicLab.Hive.Server.ADODataAccess/UserGroupAdapter.cs

    r995 r1131  
    6969
    7070    #region Overrides
    71     protected override UserGroup Convert(dsHiveServer.UserGroupRow row,
     71    protected override UserGroup ConvertRow(dsHiveServer.UserGroupRow row,
    7272      UserGroup userGroup) {
    7373      if (row != null && userGroup != null) {
     
    130130    }
    131131
    132     protected override dsHiveServer.UserGroupRow Convert(UserGroup userGroup,
     132    protected override dsHiveServer.UserGroupRow ConvertObj(UserGroup userGroup,
    133133      dsHiveServer.UserGroupRow row) {
    134134      if (userGroup != null && row != null) {
     
    212212
    213213      data.AddUserGroupRow(row);
    214       adapter.Update(row);
     214      Adapter.Update(row);
    215215
    216216      return row;
     
    219219    protected override void
    220220     UpdateRow(dsHiveServer.UserGroupRow row) {
    221       adapter.Update(row);
     221      Adapter.Update(row);
    222222    }
    223223
    224224    protected override IEnumerable<dsHiveServer.UserGroupRow>
    225225      FindById(long id) {
    226       return adapter.GetDataById(id);
     226      return Adapter.GetDataById(id);
    227227    }
    228228
    229229    protected override IEnumerable<dsHiveServer.UserGroupRow>
    230230      FindAll() {
    231       return adapter.GetData();
     231      return Adapter.GetData();
    232232    }
    233233    #endregion
     
    247247        return base.FindSingle(
    248248          delegate() {
    249             return adapter.GetDataByName(name);
     249            return Adapter.GetDataByName(name);
    250250          });
    251251      }
Note: See TracChangeset for help on using the changeset viewer.