Subversion Repositories DevTools

Rev

Rev 882 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 882 Rev 886
Line 43... Line 43...
43
  {
43
  {
44
    Integer id = new Integer(mRtagId);
44
    Integer id = new Integer(mRtagId);
45
    setName(id.toString());
45
    setName(id.toString());
46
    mLogger.debug("run");
46
    mLogger.debug("run");
47
    boolean exit = false;
47
    boolean exit = false;
48
    boolean insertRunLevel = true;
-
 
49
    RippleEngine rippleEngine = new RippleEngine(mReleaseManager, mRtagId, true);
48
    RippleEngine rippleEngine = new RippleEngine(mReleaseManager, mRtagId, true);
50
    MutableInt rconId = new MutableInt();
49
    MutableInt rconId = new MutableInt();
51
    MutableInt current_run_level = new MutableInt();
50
    MutableInt current_run_level = new MutableInt();
52
    MutableString addendum = new MutableString();
51
    MutableString addendum = new MutableString();
53
 
52
 
54
    while(!exit)
53
    while(!exit)
55
    {
54
    {
56
      try
55
      try
57
      {
56
      {
-
 
57
        sleepCheck();
58
        rippleEngine.collectMetaData();
58
        rippleEngine.collectMetaData();
59
        
59
        
60
        if ( Thread.currentThread().isInterrupted() )
60
        if ( Thread.currentThread().isInterrupted() )
61
        {
61
        {
62
          mLogger.warn("run is interrupted");
62
          mLogger.warn("run is interrupted");
Line 67... Line 67...
67
        if ( mGbebuildfilter.compareTo("unit test spawn thread") == 0)
67
        if ( mGbebuildfilter.compareTo("unit test spawn thread") == 0)
68
        {
68
        {
69
          throw new Exception();
69
          throw new Exception();
70
        }
70
        }
71
 
71
 
72
        // allowed to proceed
-
 
73
        MutableString buildFileContent = new MutableString();
72
        MutableString buildFileContent = new MutableString();
74
        
73
        
75
        if ( mGbebuildfilter.compareTo("unit test check environment") != 0)
74
        if ( mGbebuildfilter.compareTo("unit test check environment") != 0)
76
        {
75
        {
77
          if ( mGbebuildfilter.compareTo("unit test generate build files") != 0)
76
          if ( mGbebuildfilter.compareTo("unit test generate build files") != 0)
78
          {
77
          {
79
            if ( mGbebuildfilter.compareTo("unit test coordinate slave threads") != 0 )
78
            if ((mGbebuildfilter.compareTo("unit test allowed to proceed") != 0) &&
-
 
79
                (mGbebuildfilter.compareTo("unit test not allowed to proceed") != 0) &&
-
 
80
                (mGbebuildfilter.compareTo("unit test exit") != 0))
80
            {
81
            {
81
              if ( insertRunLevel )
82
              // coordinate slave threads
82
              {
83
              mLogger.warn("run coordinate slave threads");
-
 
84
 
83
                mRunLevel = RunLevel.IDLE;
85
              mRunLevel = RunLevel.WAITING;
84
                mLogger.warn("run changing run level to IDLE for rcon_id " + mRconId);
86
              mLogger.warn("run changing run level to WAITING for rcon_id " + mRconId);
85
                mRunLevel.persistNew(mReleaseManager, mRconId);
87
              mRunLevel.persist(mReleaseManager, mRconId);
86
                insertRunLevel = false;
-
 
87
              }
-
 
88
              mLogger.warn("run checking allowedToProceed");
-
 
89
              allowedToProceed(true);
-
 
90
              mLogger.info("run allowedToProceed returned");
-
 
91
  
88
 
92
              if ( mGbebuildfilter.compareTo("unit test allowed to proceed") == 0 )            
-
 
93
              {
-
 
94
                throw new ExitException();
-
 
95
              }
-
 
96
            }
-
 
97
            
-
 
98
            // coordinate slave threads
-
 
99
            mLogger.warn("run coordinate slave threads");
-
 
100
            boolean allSlaveThreadsWaiting = false;
89
              boolean allSlaveThreadsWaiting = false;
101
            boolean logWarning = true;
90
              boolean logWarning = true;
102
            boolean logWarning2 = true;
91
              boolean logWarning2 = true;
103
            
-
 
104
            while ( !allSlaveThreadsWaiting )
-
 
105
            {
-
 
106
              mReleaseManager.queryRunLevel(mRtagId);
-
 
107
              
92
              
108
              // anything but WAITING
-
 
109
              current_run_level.value = ReleaseManager.DB_IDLE;
-
 
110
              boolean moreRunLevelsConfigured = mReleaseManager.getFirstRunLevel(rconId, current_run_level);
-
 
111
                
-
 
112
              // attempt to exit loop
-
 
113
              allSlaveThreadsWaiting = true;
93
              while ( !allSlaveThreadsWaiting )
114
          
-
 
115
              do
-
 
116
              {
94
              {
-
 
95
                mReleaseManager.queryRunLevel(mRtagId);
-
 
96
                
-
 
97
                // anything but WAITING
-
 
98
                current_run_level.value = ReleaseManager.DB_IDLE;
-
 
99
                boolean moreRunLevelsConfigured = mReleaseManager.getFirstRunLevel(rconId, current_run_level);
-
 
100
                  
-
 
101
                // attempt to exit loop
117
                if (moreRunLevelsConfigured)
102
                allSlaveThreadsWaiting = true;
-
 
103
            
-
 
104
                do
118
                {
105
                {
119
                  if (current_run_level.value != ReleaseManager.DB_WAITING)
106
                  if (moreRunLevelsConfigured)
120
                  {
107
                  {
121
                    if ( logWarning )
108
                    if (current_run_level.value != ReleaseManager.DB_WAITING)
122
                    {
109
                    {
-
 
110
                      if ( logWarning )
-
 
111
                      {
123
                      mLogger.warn("run waiting for rcon id " + rconId.value);
112
                        mLogger.warn("run waiting for rcon id " + rconId.value);
124
                      logWarning = false;
113
                        logWarning = false;
-
 
114
                      }
-
 
115
                      else
-
 
116
                      {
-
 
117
                        mLogger.info("run waiting for rcon id " + rconId.value);                      
-
 
118
                      }
-
 
119
                      allSlaveThreadsWaiting = false;
125
                    }
120
                    }
126
                    else
121
                    else
127
                    {
122
                    {
128
                      mLogger.info("run waiting for rcon id " + rconId.value);                      
123
                      moreRunLevelsConfigured = mReleaseManager.getNextRunLevel(rconId, current_run_level);
129
                    }
124
                    }
130
                    allSlaveThreadsWaiting = false;
-
 
131
                  }
-
 
132
                  else
-
 
133
                  {
-
 
134
                    moreRunLevelsConfigured = mReleaseManager.getNextRunLevel(rconId, current_run_level);
-
 
135
                  }
125
                  }
136
                }
126
                }
137
              }
-
 
138
              while (moreRunLevelsConfigured && allSlaveThreadsWaiting);
127
                while (moreRunLevelsConfigured && allSlaveThreadsWaiting);
139
        
128
          
140
              if ( !allSlaveThreadsWaiting )
129
                if ( !allSlaveThreadsWaiting )
141
              {
-
 
142
                // to do, sleep for periodicMs
-
 
143
                if ( mGbebuildfilter.compareTo("unit test coordinate slave threads") == 0 )
-
 
144
                {
-
 
145
                  Thread.currentThread().interrupt();
-
 
146
                }
-
 
147
                else
-
 
148
                {
130
                {
149
                  if ( logWarning2 )
131
                  // to do, sleep for periodicMs
-
 
132
                  if ( mGbebuildfilter.compareTo("unit test coordinate slave threads") == 0 )
150
                  {
133
                  {
151
                    mLogger.warn("run sleeping 3 secs waiting for slave threads");
-
 
152
                    logWarning2 = false;
134
                    Thread.currentThread().interrupt();
153
                  }
135
                  }
154
                  else
136
                  else
155
                  {
137
                  {
-
 
138
                    if ( logWarning2 )
-
 
139
                    {
-
 
140
                      mLogger.warn("run sleeping 3 secs waiting for slave threads");
-
 
141
                      logWarning2 = false;
-
 
142
                    }
-
 
143
                    else
-
 
144
                    {
156
                    mLogger.info("run sleeping 3 secs waiting for slave threads");
145
                      mLogger.info("run sleeping 3 secs waiting for slave threads");
-
 
146
                    }
-
 
147
                    Thread.sleep(3000);
-
 
148
                    mLogger.info("run sleep returned");
157
                  }
149
                  }
158
                  Thread.sleep(3000);
-
 
159
                  mLogger.info("run sleep returned");
-
 
160
                }
150
                }
161
              }
151
              }
162
            }
152
              
163
            
-
 
164
            if ( mGbebuildfilter.compareTo("unit test coordinate slave threads") == 0 )
153
              if ( mGbebuildfilter.compareTo("unit test coordinate slave threads") == 0 )
165
            {
154
              {
166
              throw new ExitException();
155
                throw new ExitException();
167
            }
156
              }
-
 
157
              
-
 
158
              // DEVI 50527
-
 
159
              mRunLevel = RunLevel.PUBLISHING;
-
 
160
              mLogger.warn("run changing run level to PUBLISHING for rcon_id " + mRconId);
-
 
161
              mRunLevel.persist(mReleaseManager, mRconId);
168
            
162
              
169
            deliverChange(null, "AbtPublish", false);
163
              deliverChange(null, "AbtPublish", false);
170
            // preserve 
164
              // preserve 
171
            String reportingFullyPublished = mReportingFullyPublished;
165
              String reportingFullyPublished = mReportingFullyPublished;
172
            String reportingNewLabel = mReportingNewLabel;
166
              String reportingNewLabel = mReportingNewLabel;
173
            deliverChange(null, "AbtTearDown", false);
167
              deliverChange(null, "AbtTearDown", false);
174
            
168
              
175
            // DEVI 47395 delete the build file now
169
              // DEVI 47395 delete the build file now
176
            // this will prevent any chance of multiply publishing a package version
170
              // this will prevent any chance of multiply publishing a package version
177
            File buildFile = new File(mRtagId + "build.xml");
171
              File buildFile = new File(mRtagId + "build.xml");
178
            
172
              
179
            if ( buildFile.exists() )
173
              if ( buildFile.exists() )
180
            {
-
 
181
              buildFile.delete();
-
 
182
            }
-
 
183
            
-
 
184
            if ( mReportingPackageName != null )
-
 
185
            {
-
 
186
              // a dummy build file did not apply
-
 
187
              // Publishing is done outside ant by design
-
 
188
              // The preference is to do all release manager work outside ant
-
 
189
 
-
 
190
              boolean buildErrorOccurred = true;
-
 
191
              try
-
 
192
              {
174
              {
-
 
175
                buildFile.delete();
-
 
176
              }
-
 
177
              
-
 
178
              if ( mReportingPackageName != null )
-
 
179
              {
-
 
180
                // a dummy build file did not apply
-
 
181
                // Publishing is done outside ant by design
193
                if ( reportingFullyPublished != null && reportingFullyPublished.compareTo("yes") == 0 )
182
                // The preference is to do all release manager work outside ant
-
 
183
  
-
 
184
                boolean buildErrorOccurred = true;
-
 
185
                try
194
                {
186
                {
195
                  buildErrorOccurred = false;
-
 
196
                  
-
 
197
                  if ( reportingNewLabel.length() > 0 )
187
                  if ( reportingFullyPublished != null && reportingFullyPublished.compareTo("yes") == 0 )
198
                  {
188
                  {
199
                    Integer rtagId = new Integer(mRtagId);
189
                    buildErrorOccurred = false;
200
                    
190
                    
201
                    if ( mGbeGatherMetricsOnly == null )
191
                    if ( reportingNewLabel.length() > 0 )
202
                    {
192
                    {
-
 
193
                      Integer rtagId = new Integer(mRtagId);
-
 
194
                      
203
                      if ( mReportingDoesNotRequireSourceControlInteraction.compareTo("false") == 0 )
195
                      if ( mGbeGatherMetricsOnly == null )
204
                      {
196
                      {
-
 
197
                        if ( mReportingDoesNotRequireSourceControlInteraction.compareTo("false") == 0 )
-
 
198
                        {
205
                        // requires source control interaction ie labelled in ClearCase
199
                          // requires source control interaction ie labelled in ClearCase
206
                        // publish to release manager
200
                          // publish to release manager
207
                        mReleaseManager.autoMakeRelease(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, mReportingPackageVersion, reportingNewLabel, mReportingPackageDepends, mReportingIsRipple);
201
                          mReleaseManager.autoMakeRelease(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, mReportingPackageVersion, reportingNewLabel, mReportingPackageDepends, mReportingIsRipple);
208
                      }
202
                        }
209
                      else
203
                        else
210
                      {
204
                        {
211
                        // trigger release note generation and on_make_official.wsf, which changes ownership and write access in the archive
205
                          // trigger release note generation and on_make_official.wsf, which changes ownership and write access in the archive
212
                        // this should not be through autoMakeRelease (sledgehammer, the package is already official in release manager in this scenario)
206
                          // this should not be through autoMakeRelease (sledgehammer, the package is already official in release manager in this scenario)
213
                        // at the time of writing, calling autoMakeRelease does not help if the package was 'released' more than 24 hours ago
207
                          // at the time of writing, calling autoMakeRelease does not help if the package was 'released' more than 24 hours ago
214
                        // this seems to be a business rule in the generate_release_notes package
208
                          // this seems to be a business rule in the generate_release_notes package
215
                        // the buildtool has no option but to call autoMakeRelease at present
209
                          // the buildtool has no option but to call autoMakeRelease at present
216
                        mReleaseManager.autoMakeRelease(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, mReportingPackageVersion, reportingNewLabel, mReportingPackageDepends, mReportingIsRipple);
210
                          mReleaseManager.autoMakeRelease(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, mReportingPackageVersion, reportingNewLabel, mReportingPackageDepends, mReportingIsRipple);
-
 
211
                        }
217
                      }
212
                      }
-
 
213
                      
-
 
214
                      FileInputStream abtmetrics = new FileInputStream( rtagId.toString() + "abtmetrics.txt" );
-
 
215
                      DataInputStream din = new DataInputStream( abtmetrics );
-
 
216
                      InputStreamReader isr = new InputStreamReader( din );
-
 
217
                      BufferedReader br = new BufferedReader( isr );
-
 
218
                      String metrics = br.readLine();
-
 
219
                      mLogger.warn( "execute read metrics string " + metrics );
-
 
220
                      br.close();
-
 
221
                      isr.close();
-
 
222
                      din.close();
-
 
223
  
-
 
224
                      mReleaseManager.insertPackageMetrics(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, metrics );
-
 
225
                    }
-
 
226
                    else
-
 
227
                    {
-
 
228
                      mLogger.info("run package not labelled in ClearCase on " + mReportingPackageName + mReportingPackageVersion);
-
 
229
                      throw new Exception();
218
                    }
230
                    }
219
                    
-
 
220
                    FileInputStream abtmetrics = new FileInputStream( rtagId.toString() + "abtmetrics.txt" );
-
 
221
                    DataInputStream din = new DataInputStream( abtmetrics );
-
 
222
                    InputStreamReader isr = new InputStreamReader( din );
-
 
223
                    BufferedReader br = new BufferedReader( isr );
-
 
224
                    String metrics = br.readLine();
-
 
225
                    mLogger.warn( "execute read metrics string " + metrics );
-
 
226
                    br.close();
-
 
227
                    isr.close();
-
 
228
                    din.close();
-
 
229
 
-
 
230
                    mReleaseManager.insertPackageMetrics(rtagId.toString(), mReportingPackageName, mReportingPackageExtension, metrics );
-
 
231
                  }
231
                  }
232
                  else
232
                  else
233
                  {
233
                  {
234
                    mLogger.info("run package not labelled in ClearCase on " + mReportingPackageName + mReportingPackageVersion);
234
                    mLogger.info("run build error occurred on " + mReportingPackageName + mReportingPackageVersion);
235
                    throw new Exception();
235
                    throw new Exception();
236
                  }
236
                  }
-
 
237
                  
237
                }
238
                }
238
                else
-
 
239
                {
-
 
240
                  mLogger.info("run build error occurred on " + mReportingPackageName + mReportingPackageVersion);
-
 
241
                  throw new Exception();
-
 
242
                }
-
 
243
                
-
 
244
              }
-
 
245
              catch( Exception e)
239
                catch( Exception e)
246
              {
-
 
247
                // an error occurred publishing to ClearCase or Release Manager
-
 
248
                // take out the archive entry first
-
 
249
                String fs = System.getProperty( "file.separator" );
-
 
250
                String dpkgArchiveEntry = new String(Package.mGbeDpkg + fs + mReportingPackageName + fs + mReportingPackageVersion);
-
 
251
                File dpkgArchiveEntryFile = new File(dpkgArchiveEntry);
-
 
252
                mLogger.info("run checking existence of " + dpkgArchiveEntry);
-
 
253
                
-
 
254
                if ( dpkgArchiveEntryFile.exists() )
-
 
255
                {
240
                {
-
 
241
                  // an error occurred publishing to ClearCase or Release Manager
-
 
242
                  // take out the archive entry first
-
 
243
                  String fs = System.getProperty( "file.separator" );
-
 
244
                  String dpkgArchiveEntry = new String(Package.mGbeDpkg + fs + mReportingPackageName + fs + mReportingPackageVersion);
-
 
245
                  File dpkgArchiveEntryFile = new File(dpkgArchiveEntry);
-
 
246
                  mLogger.info("run checking existence of " + dpkgArchiveEntry);
-
 
247
                  
256
                  if ( dpkgArchiveEntryFile.isDirectory() )
248
                  if ( dpkgArchiveEntryFile.exists() )
257
                  {
249
                  {
-
 
250
                    if ( dpkgArchiveEntryFile.isDirectory() )
-
 
251
                    {
258
                    mLogger.warn("run deleting " + dpkgArchiveEntryFile.getName());
252
                      mLogger.warn("run deleting " + dpkgArchiveEntryFile.getName());
259
                    deleteDirectory(dpkgArchiveEntryFile);
253
                      deleteDirectory(dpkgArchiveEntryFile);
-
 
254
                    }
260
                  }
255
                  }
261
                }
-
 
262
                else
256
                  else
263
                {
-
 
264
                  String dplyArchiveEntry = new String(Package.mGbeDply + fs + mReportingPackageName + fs + mReportingPackageVersion);
-
 
265
                  File dplyArchiveEntryFile = new File(dplyArchiveEntry);
-
 
266
                  mLogger.info("run checking existence of " + dplyArchiveEntry);
-
 
267
                  
-
 
268
                  if ( dplyArchiveEntryFile.exists() )
-
 
269
                  {
257
                  {
-
 
258
                    String dplyArchiveEntry = new String(Package.mGbeDply + fs + mReportingPackageName + fs + mReportingPackageVersion);
-
 
259
                    File dplyArchiveEntryFile = new File(dplyArchiveEntry);
-
 
260
                    mLogger.info("run checking existence of " + dplyArchiveEntry);
-
 
261
                    
270
                    if ( dplyArchiveEntryFile.isDirectory() )
262
                    if ( dplyArchiveEntryFile.exists() )
271
                    {
263
                    {
-
 
264
                      if ( dplyArchiveEntryFile.isDirectory() )
-
 
265
                      {
272
                      mLogger.warn("run deleting " + dplyArchiveEntryFile.getName());
266
                        mLogger.warn("run deleting " + dplyArchiveEntryFile.getName());
273
                      deleteDirectory(dplyArchiveEntryFile);
267
                        deleteDirectory(dplyArchiveEntryFile);
-
 
268
                      }
274
                    }
269
                    }
275
                  }
270
                  }
276
                }
271
                  
277
                
-
 
278
                Integer rtagId = new Integer(mRtagId);
272
                  Integer rtagId = new Integer(mRtagId);
279
                // pass root file
273
                  // pass root file
280
                mReleaseManager.excludeFromBuild(mReportingPackageVersionId, mReportingPackageVersion, rtagId.toString(), null, null, mReportingBuildFailureLogFile);
274
                  mReleaseManager.excludeFromBuild(mReportingPackageVersionId, mReportingPackageVersion, rtagId.toString(), null, null, mReportingBuildFailureLogFile);
281
 
275
  
282
                if ( !buildErrorOccurred )
276
                  if ( !buildErrorOccurred )
283
                {
277
                  {
284
                  mLogger.fatal("an error occurred publishing to ClearCase or Release Manager");
278
                    mLogger.fatal("an error occurred publishing to ClearCase or Release Manager");
285
                  throw new Exception("an error occurred publishing to ClearCase or Release Manager");
279
                    throw new Exception("an error occurred publishing to ClearCase or Release Manager");
-
 
280
                  }
286
                }
281
                }
287
              }
282
              }
-
 
283
              
-
 
284
              if ( mGbebuildfilter.compareTo("unit test coordinate slave threads") == 0 )            
-
 
285
              {
-
 
286
                throw new ExitException();
-
 
287
              }
-
 
288
              mLogger.info("run coordinate slave threads returned");
288
            }
289
            }
289
            
290
            
-
 
291
            // DEVI 51366 allowed to proceed after coordinate slave threads
-
 
292
            mLogger.warn("run checking allowedToProceed");
-
 
293
            allowedToProceed(true);
290
            mLogger.info("run coordinate slave threads returned");
294
            mLogger.info("run allowedToProceed returned");
-
 
295
 
-
 
296
            if ( mGbebuildfilter.compareTo("unit test allowed to proceed") == 0 )            
-
 
297
            {
-
 
298
              throw new ExitException();
-
 
299
            }
291
            
300
            
292
            // generate build files
301
            // generate build files
293
            mLogger.warn("run generating build files");
302
            mLogger.warn("run generating build files");
294
            rippleEngine.planRelease();
303
            rippleEngine.planRelease();
295
              
304
              
Line 362... Line 371...
362
          setViewUp(buildFileContent.value, true);
371
          setViewUp(buildFileContent.value, true);
363
        }
372
        }
364
        
373
        
365
        deliverChange(null, null, false);
374
        deliverChange(null, null, false);
366
        mLogger.info("run deliverChange returned");
375
        mLogger.info("run deliverChange returned");
-
 
376
        
-
 
377
        mSleep = false;
-
 
378
        if ( addendum.value.compareTo("dummy") == 0 )
-
 
379
        {
-
 
380
          // no build requirement, so let things settle
-
 
381
          mLogger.warn("run no build requirement, so let things settle");
-
 
382
          mSleep = true;
-
 
383
        }        
-
 
384
        
367
      }
385
      }
368
      catch( SQLException e )
386
      catch( SQLException e )
369
      {
387
      {
370
        // oracle connection issues        
388
        // oracle connection issues        
371
        mLogger.warn("run oracle connection issues");
389
        mLogger.warn("run oracle connection issues");
372
        mSleep = true;
390
        mException = true;
373
      }
391
      }
374
      catch( ExitException e )
392
      catch( ExitException e )
375
      {
393
      {
376
        mLogger.warn("run ExitException");
394
        mLogger.warn("run ExitException");
377
        exit = true;
395
        exit = true;
Line 391... Line 409...
391
          {
409
          {
392
            // notify first
410
            // notify first
393
            // many reasons for indefinite pause, including database related, so do database last
411
            // many reasons for indefinite pause, including database related, so do database last
394
            indefinitePause(rippleEngine, cause);
412
            indefinitePause(rippleEngine, cause);
395
            mReleaseManager.indefinitePause();
413
            mReleaseManager.indefinitePause();
-
 
414
            // DEVI 51366 force sleep at beginning of while loop
-
 
415
            mException = true;
396
          }
416
          }
397
          catch( Exception f )
417
          catch( Exception f )
398
          {
418
          {
399
            mLogger.error("run indefinitePause failed");
419
            mLogger.error("run indefinitePause failed");
400
          }
420
          }
401
        }
421
        }
402
      }
422
      }
403
 
-
 
404
      mSleep = false;
-
 
405
      if ( addendum.value.compareTo("dummy") == 0 )
-
 
406
      {
-
 
407
        // no build requirement, so let things settle
-
 
408
        mLogger.warn("run no build requirement, so let things settle");
-
 
409
        mSleep = true;
-
 
410
      }
-
 
411
    }
423
    }
412
  }
424
  }
413
 
425
 
414
  /**returns 'M'
426
  /**returns 'M'
415
   */
427
   */